﻿//using Core;
//using UnityEngine;
//using UnityEngine.UI;
//using log = Core.Util.Log;

//[RequireComponent(typeof(GridLayoutGroup))]
//public class GridResizer : MonoBehaviour
//{
//    public int W;
//    public int H;
//    public string Prefix;
//    public int Total { get; private set; }

//    private int MaxCellSize = 150;

//    private GridLayoutGroup m_layout;
//    private float Width;
//    private float Height;
//    private GameObject[,] G;

//    public GameObject GetChild(int x, int y)
//    {
//        if (x < 0 || x >= W || y < 0 || y >= H)
//        {
//            return null;
//        }

//        return G[x, y];
//    }

//    public void Awake()
//    {
//        m_layout = GetComponent<GridLayoutGroup>();

//        G = new GameObject[W, H];
//        int child_cnt = transform.childCount;

//        if (child_cnt == 0)
//        {
//            log.err($"Error! GridResizer至少需要一个子节点");
//            return;
//        }

//        for (int i = 0; i < child_cnt; i++)
//        {
//            var child = transform.GetChild(i).gameObject;
//            child.name = $"{Prefix} {i + 1}";
//        }

//        Init(W, H);
//    }

//    public void Init()
//    {
//        Init(W, H);
//    }

//    public void Init(int w, int h)
//    {
//        W = w; H = h;
//        Total = H * W;

//        var rect = GetComponent<RectTransform>().rect;
//        Width = rect.width;
//        Height = rect.height;

//        m_layout.childAlignment = TextAnchor.MiddleCenter;
//        m_layout.constraint = GridLayoutGroup.Constraint.FixedColumnCount;
//        m_layout.constraintCount = w;

//        var cnt = transform.childCount;
//        if (Total > cnt)
//        {
//            var delta = Total - cnt;
//            var template = transform.GetChild(0).gameObject;
//            for (int i = 0; i < delta; i++)
//            {
//                var go = GameObject.Instantiate(template);
//                Util.UI.SetParent(go, gameObject);
//                go.name = $"{Prefix} {i + cnt + 1}";
//            }
//        }
//        else if (Total < cnt)
//        {
//            for (int i = cnt - 1; i >= Total; i--)
//            {
//                var go = transform.GetChild(i).gameObject;
//                Util.UI.DestroyImmediate(go);
//            }
//        }

//        cnt = transform.childCount;
//        for (int i = 0; i < cnt; i++)
//        {
//            var child = transform.GetChild(i);
//            int p_x = i % W;
//            int p_y = i / W;
//            G[p_x, p_y] = child.gameObject;
//        }

//        var padding_h = m_layout.padding.left + m_layout.padding.right;
//        var padding_v = m_layout.padding.top + m_layout.padding.bottom;

//        float A = 8;
//        float B = 2;

//        var x = (Width - padding_h) / (W * A + (W - 1) * B);
//        var y = (Height - padding_v) / (H * A + (H - 1) * B);

//        var item_width = A * x;
//        var item_height = A * y;

//        m_layout.spacing = new Vector2(B * x, B * y);

//        var cell_size = Mathf.Min(item_width, item_height, MaxCellSize);
//        m_layout.cellSize = new Vector2(cell_size, cell_size);
//    }
//}
